/**
 * 2017年3月8日
 * 二人牛牛
 */

var roomManager = require('../../../services/ernn/roomManager');

module.exports = function (app) {
    return new Handler(app);
};

var Handler = function (app) {
    this.app = app;
};

var handler = Handler.prototype;

var log = console.log;

handler.enterRoom = function (msg, session, next) {
    console.log('二人牛牛 gameHandler.enterRoom caught >>>>>>>>');

    msg.rid = parseInt(msg.rid);
    msg.playerId = parseInt(msg.playerId);
    msg.pos = parseInt(msg.pos);

    roomManager.enterRoom(msg, function (err) {
        if (err) {
            log('进入房间失败！err: ', err);
            return next(null, { err });
        }
        log('进入房间成功！playerId : %s, rid : %s', msg.playerId, msg.rid);
        return next(null, {});
    });

};

// 旁观房间
handler.addObserver = function (msg, session, next) {
    log('二人牛牛，观察游戏！', JSON.stringify(msg));
    msg.playerId = parseInt(msg.playerId);
    msg.rid = parseInt(msg.rid);

    if (!msg.rid) {
        return next({err: 'client have not sent roomId'});
    }

    roomManager.addObserver(msg, function (err, data) {
        if (err) {
            log('观察游戏失败！err: ', err);
            return next(null, { err });
        }
        log('观察游戏成功！playerId : %s, rid : %s', msg.playerId, msg.rid);
        return next(null, data);
    });
};

handler.bid = function (msg, session, next) {
    console.log('二人牛牛 gameHandler.bid caught >>>>>>>>>>>>>>>>>>>>');
    console.log(msg);

    // var gameId = session.get('gameId');
    // var roomId = session.get('roomId');
    // var playerId = session.get('playerId');

    // var err = '';

    // for (var k in msg) {
    //     if (isNaN(k)) {
    //         delete msg[k];
    //         continue;
    //     }
    //     msg[k] = (parseInt(msg[k]) * 100);  // 元转化为分
    // }

    // 元转化为分
    msg.bid = parseInt(msg.bid * 100);
    msg.playerId = parseInt(msg.playerId);
    msg.rid = parseInt(msg.rid);

    var ret = roomManager.bid(msg);

    next(null, { err: ret });
};

handler.applyBanker = function (msg, session, next) {
    // 这个是抢庄
    console.log('二人牛牛 gameHandler.applyBanker caught >>>>>>>>>>>>>>>>>>>>');
    console.log(msg);

    if (!msg.rid) {
        return next(null, { err: 'data invalid!' });
    }

    // if (!msg.rid || !msg.playerId || !msg.apply) {
    //     return next(null, { err: 'data invalid!' });
    // }

    msg.playerId = parseInt(msg.playerId);
    msg.rid = parseInt(msg.rid);

    roomManager.applyBanker(msg, function (err) {

        if (err) {
            log(err);
            return next(null, { err });
        }

        next(null, {});
    });
};

// 进入房间之后，点击开始表明准备开始游戏
handler.gameReady = function (msg, session, next) {
    log('二人牛牛 准备开始！', msg);

    if (!msg.rid) {
        return next(null, { err: 'data invalid!' });
    }

    msg.playerId = parseInt(msg.playerId);
    msg.rid = parseInt(msg.rid);

    roomManager.gameReady(msg, function (err) {
        if (err) {
            log('准备开始失败！err: ', err);
            return next(null, { err });
        }
        log('准备开始成功！playerId : %s, rid : %s', msg.playerId, msg.rid);
        return next(null, {});
    });
};

// 离开房间：分为游戏者离开和旁观者离开
// 客户端需要传递离开类型
handler.leaveRoom = function (msg, session, next) {
    log('二人牛牛 离开房间！', msg);

    if (!msg.rid) {
        return next(null, { err: 'data invalid!' });
    }

    msg.playerId = parseInt(msg.playerId);
    msg.rid = parseInt(msg.rid);

    roomManager.leaveRoom(msg.playerId, function (err) {
        if (err) {
            log('离开房间失败！err: ', err);
            return next(null, { err });
        }
        log('离开房间成功！playerId : %s, rid : %s', msg.playerId, msg.rid);
        return next(null, {});
    });
};

// 提前结束开牌阶段，进入到下一轮
handler.nextRound = function (msg, session, next) {
    log('二人牛牛 进入到下一轮！', msg);
    
    if (!msg.rid) {
        return next(null, { err: 'data invalid!' });
    }

    msg.playerId = parseInt(msg.playerId);
    msg.rid = parseInt(msg.rid);
    
    roomManager.nextRound(msg, function (err) {
        if (err) {
            log('进入到下一轮失败！err: ', err);
            return next(null, { err });
        }
        log('进入到下一轮成功！playerId : %s, rid : %s', msg.playerId, msg.rid);
        return next(null, {});
    });
};

// 获取才只有一个人的房间号
handler.getWaitRoom = function (msg, session, next) {

    roomManager.getWaitRoom(function (err, data) {
        if (err) {
            log('获取才只有一个人的房间号！err: ', err);
            return next(null, { err });
        }
        log('获取才只有一个人的房间号！rid : %s', data.rid);
        return next(null, data);
    });
};
